/*************************************************************************************************************************
Multi-Include-Prevent Segment
**************************************************************************************************************************/
#ifndef IF_GPIO_H_
#define IF_GPIO_H_

/*************************************************************************************************************************
Include File Segment
**************************************************************************************************************************/
#include "IF_GxwLib.h"

/*************************************************************************************************************************
Type Segment
**************************************************************************************************************************/ 

/*************************************************************************************************************************
Define Segment
**************************************************************************************************************************/
#define GPIO_PORT_A                0x00u
#define GPIO_PORT_B                0x01u
#define GPIO_PORT_C                0x02u
#define GPIO_PORT_D                0x03u
#define GPIO_PORT_E                0x04u
#define GPIO_PORT_F                0x05u
#define GPIO_PORT_G                0x06u
#define GPIO_PORT_H                0x07u

/* Level selection */
#define GPIO_LEVEL_H               1U
#define GPIO_LEVEL_L               0U

/* Pull-up or Pull-down selection */
#define GPIO_PULL_DISABLE          0u
#define GPIO_PULL_MODE_UP          1u
#define GPIO_PULL_MODE_DOWN        2u

/* Interrupt detection mode selection */
#define GPIO_INT_DIS               0u
#define GPIO_INT_MODE_FALLING      1u
#define GPIO_INT_MODE_RAISING      2u

#define GPIO_BYTE(addr)            (*((volatile uint8*)(addr)))
/*************************************************************************************************************************
Enum Segment
**************************************************************************************************************************/

/*************************************************************************************************************************
Union Segment
**************************************************************************************************************************/

/*************************************************************************************************************************
Structure Segment
**************************************************************************************************************************/

/*************************************************************************************************************************
Function Declare Segment
**************************************************************************************************************************/

extern void  IF_GPIO_SetPinDirOut(uint8 u8PortNum, uint8 u8PinNum);
extern void  IF_GPIO_SetPinDirIn(uint8 u8PortNum, uint8 u8PinNum);
extern void  IF_GPIO_WritePinData(uint8 u8PortNum, uint8 u8PinNum, uint8 u8PinLevel);
extern uint8 IF_GPIO_ReadPinData(uint8 u8PortNum, uint8 u8PinNum);
extern void  IF_GPIO_TogglePin(uint8 u8PortNum, uint8 u8PinNum);
extern uint8 IF_GPIO_ReadPinInput(uint8 u8PortNum, uint8 u8PinNum);
extern void  IF_GPIO_SetPinPull(uint8 u8PortNum, uint8 u8PinNum, uint8 u8PullMode);
extern void  IF_GPIO_SetPinInt(uint8 u8PortNum, uint8 u8PinNum, uint8 u8IntMode);
extern void  IF_GPIO_SetPinMode(uint8 u8PortNum, uint8 u8PinNum, uint8 mode);
extern void  IF_WKUP_Init(void);


#endif
